import { request } from '../_utils/request';

/** 将扁平数组转换为树形结构 */
function convertToTree(items) {
  // 确保 items 是数组
  if (!Array.isArray(items)) {
    console.error('输入数据不是数组:', items);
    return [];
  }

  const result = [];
  const itemMap = {};

  // 处理图片URL的函数
  const processImageUrl = (url) => {
    if (!url) return 'https://cdn-we-retail.ym.tencent.com/miniapp/category/category-default.png';
    
    // 如果是本地开发环境的URL，转换为http并移除额外参数
    if (url.includes('127.0.0.1:5000')) {
      // 先替换协议
      let processedUrl = url.replace('https://', 'http://');
      // 移除任何查询参数
      processedUrl = processedUrl.split('?')[0];
      return processedUrl;
    }
    return url;
  };

  // 先转成map便于查找
  items.forEach(item => {
    itemMap[item.id] = {
      ...item,
      children: [],
      thumbnail: processImageUrl(item.icon),
      disabled: false
    };
  });

  // 构建树形结构
  items.forEach(item => {
    const parent = itemMap[item.parentId];
    if (parent && item.parentId !== 0) {
      // 有父节点就作为子节点
      // 如果子节点没有图标，继承父节点的图标
      if (!item.icon) {
        itemMap[item.id].thumbnail = parent.thumbnail;
      } else {
        // 确保子节点的图标也经过处理
        itemMap[item.id].thumbnail = processImageUrl(item.icon);
      }
      parent.children.push(itemMap[item.id]);
    } else {
      // parentId为0或没有父节点就是顶层节点
      result.push(itemMap[item.id]);
    }
  });



  return result;
}

/** 获取商品分类列表 */
export async function getCategoryList() {
  try {
    // 发起请求获取分类数据
    const response = await request({
      url: '/Category/list',
      method: 'get'
    });

   

    // 确保response.data是数组
    const categoryData = Array.isArray(response.data) ? response.data : 
                        Array.isArray(response) ? response : [];

    // 转换成树形结构
    const treeData = convertToTree(categoryData);
    
    // 按照 sort 字段排序
    treeData.sort((a, b) => (a.sort || 0) - (b.sort || 0));
    treeData.forEach(item => {
      if (item.children && item.children.length > 0) {
        item.children.sort((a, b) => (a.sort || 0) - (b.sort || 0));
      }
    });

    
    return treeData;

  } catch (error) {
    console.error('获取分类列表失败:', error);
    throw error;
  }
}
